
const arr=[10,20,30,40]

// pop:
const popRes=arr.pop();
console.log('pop:'+popRes,arr)
//pop删除数组的最后一项，并返回被删除的那一项

const shiftRes=arr.shift()
console.log('shift:'+shiftRes,arr)
// shift删除数组的第一项，并返回被删除的那一项

// push
const PushRes=arr.push(50)
console.log('push:'+PushRes,arr)
// 往数组后面追加一项，并返回数组的长度(length)

//unshift
const unshiftRes=arr.unshift(5)
console.log('unshift:'+unshiftRes,arr)
// 在数组最前面追加一项，并返回数组的长度(length)



/*------------数组的API有那些是纯函数（1.不改变原数组，返回一个数组）------------*/

const newArr=[10,20,30,40]

//contact
const arr1=newArr.concat([50,60,70])
//map
const arr2=newArr.map(num=>{
    return num*10
});
// filter
const arr3=newArr.filter(num=>{
    return num>25
})
// slice() 
const arr4=newArr.slice()

console.log(newArr) //都不会改变原数组
console.log(arr2)
console.log(arr3)
console.log(arr4)


/*------------非纯函数-----------*/

// push pop shift unshift
// forEach
// some every
// reduce


const ArrTest=[10,20,30,40,50]
/*------------数组slice和splice的区别------------*/

// 1.功能区别（slice-切片,splice-剪接）
// 2.参数和返回值
// 3.是否是纯函数



// slice纯函数,方法可从已有的数组中返回选定的元素。 arrayObject.slice(start,end)
const arr_1=ArrTest.slice()
const arr_2=ArrTest.slice(1,4)
const arr_3=ArrTest.slice(2) //截取数组下标2以后的
const arr_4=ArrTest.slice(-2) //截取数组最后两个
console.log(arr_2)  //返回[20, 30, 40]
console.log(arr_3) //返回[30, 40, 50]
console.log(arr_4) //返回[40, 50]

//splice非纯函数(会影响原函数类似与剪辑的功能)
const spliceRes=ArrTest.splice(1,2,'a','b','c')   //从数组下标1的地方删掉两个(20,30)然后把'a','b','c'插入
console.log(spliceRes,ArrTest);

const spliceres_1=ArrTest.splice(1,3) //从数组下标1的地方删掉3个,返回被删除的那几项
console.log(spliceres_1,ArrTest) //[20, 30, 40] (2) [10, 50]

const spliceres_2=ArrTest.splice(1,0,'a,b,c') //从数组下标1的地方增加三项


const mapres=[10,20,30].map(parseInt);
console.log(mapres)   //[10, NaN, NaN]

// 拆解

// [10,20,30].map((num,index)=>{
//     return parseInt(num,index)
// })

// parseInt(10,0) //会转换成10
// parseInt(10,10) //会以十进制转换10

// 第二轮：
// parseInt(20,1) //会转换成NAN ，1不符合parsetInt第二个参数的格式（需要传入进制）

// parseInt(30,2)  //同理2也不符合